package br.com.ava.view.produto;

import java.io.IOException;
import java.util.List;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.context.FacesContext;

import br.com.ava.core.editora.Editora;
import br.com.ava.core.editora.EditoraMediator;
import br.com.ava.core.infra.excecao.NegocioException;
import br.com.ava.core.produto.Produto;
import br.com.ava.core.produto.ProdutoMediator;
import br.com.ava.view.AplicacaoMB;

@ManagedBean
public abstract class AbstractProdutoEditarMB extends AplicacaoMB {

	@ManagedProperty(value = "#{produtoMediator}")
	protected ProdutoMediator produtoMediator;
	@ManagedProperty(value = "#{editoraMediator}")
	protected EditoraMediator editoraMediator;
	protected Produto produto;
	protected Integer idEditora;

	public void confirmar() throws IOException {

		try {

			if (idEditora != null) {
				produto.setEditora(editoraMediator.buscar(idEditora));
			}

			salvar(produto);
			adicionarMensagemCadastroSucesso();
			FacesContext.getCurrentInstance().getExternalContext()
					.redirect("listar.jsf");
		} catch (NegocioException erro) {
			adicionarMensagemErro(erro.getMensagens());
		}
	}

	protected abstract void salvar(Produto produto);

	public List<Editora> getEditoras() {
		return editoraMediator.consultarTodas();
	}

	public ProdutoMediator getProdutoMediator() {
		return produtoMediator;
	}

	public void setProdutoMediator(ProdutoMediator produtoMediator) {
		this.produtoMediator = produtoMediator;
	}

	public Produto getProduto() {
		return produto;
	}

	public void setProduto(Produto produto) {
		this.produto = produto;
	}

	public EditoraMediator getEditoraMediator() {
		return editoraMediator;
	}

	public void setEditoraMediator(EditoraMediator editoraMediator) {
		this.editoraMediator = editoraMediator;
	}

	public Integer getIdEditora() {
		return idEditora;
	}

	public void setIdEditora(Integer idEditora) {
		this.idEditora = idEditora;
	}

}
